#include "threadtratacliente.h"

ThreadTrataCliente::ThreadTrataCliente(QObject *parent) :
    QThread(parent)
{
}
ThreadTrataCliente::ThreadTrataCliente(QTcpSocket * a,MiniControlador * mini){
        this->clientConnection= a;
        this->mini=mini;
}

void ThreadTrataCliente::run(){

    clientConnection->waitForReadyRead(1000);
    qDebug()<<clientConnection->readAll();


    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_7);
    out << (quint16)0;
    out <<QString("mensagemmm");
    out.device()->seek(0);
    out << (quint16)(block.size() - sizeof(quint16));

     connect(clientConnection, SIGNAL(disconnected()),
            clientConnection, SLOT(deleteLater()));

    clientConnection->write(block);

}

bool ThreadTrataCliente::efetuaTransacao(int agencia, int conta){

}

//bool ThreadTrataCliente::efetuaTransacao(int agencia, int conta){

//    int tipoDeTransacao = transacao->tipoDeTransacao;
//    int agenciaOrigem = transacao->agenciaOrigem;
//    int contaOrigem = transacao->contaOrigem;
//    int agenciaDestino = transacao->agenciaDestino;
//    int contaDestino = transacao->contaDestino;
//    int valor = transacao->valor;
//    int tempo = transacao->tempo;

//    bool operacaoValida = true;
//    bool clienteOrigemEncontrado = false;
//    bool clienteDestinoEncontrado = false;


//    int conta, agencia, saldo;
//    int conta2, agencia2, saldo2;
//    QString nome, nome2,linha;
//    QString linhaApontada, linhaApontada2;
//    QStringList camposDaLinhaApontada,camposDaLinhaApontada2,linhasDoArquivo,linhasDoArquivo2;

//    int posicaoClienteOrigem=0;



//    if (tipoDeTransacao == 0){//deposito


//        //tranferencia entre agencias iguais


//        controladorDeRecursos->vetorFileClientes[agenciaOrigem]->open(QIODevice::ReadOnly);

//        //testar se as contas sao diferentes


//        linhasDoArquivo.clear();
//        camposDaLinhaApontada.clear();

//        do{ //buscar cliente origem


//            linhasDoArquivo.append(controladorDeRecursos->streamClientes[agenciaOrigem]->readLine());

//            camposDaLinhaApontada = linhasDoArquivo.last().split(":");

//            conta = (camposDaLinhaApontada.at(0)).toInt();
//            agencia = (camposDaLinhaApontada.at(1)).toInt();
//            nome = camposDaLinhaApontada.at(2);
//            saldo = (camposDaLinhaApontada.at(3)).toInt();


//        }while ((conta != contaOrigem) && !(controladorDeRecursos->streamClientes[agenciaOrigem]->atEnd()));



//        if (conta == contaOrigem){//achei o cliente

//            clienteOrigemEncontrado = true;
//            posicaoClienteOrigem = linhasDoArquivo.size() - 1;

//        }else {//nao achei o cliente origem
//            clienteOrigemEncontrado = false;

//        }
//        //até aqui agente achou o primeiro e viu que ele tem saldo e agente tem o lock da agencia
//        // as linhas do arquivo contem todas as linhas até o usuario origem

//        while (!controladorDeRecursos->streamClientes[agenciaOrigem]->atEnd()){
//            linhasDoArquivo.append(controladorDeRecursos->streamClientes[agenciaOrigem]->readLine());
//        }


//        linha = linhasDoArquivo.at(posicaoClienteOrigem);
//        camposDaLinhaApontada = linha.split(":");

//        conta = (camposDaLinhaApontada.at(0)).toInt();

//        agencia = (camposDaLinhaApontada.at(1)).toInt();
//        nome = camposDaLinhaApontada.at(2);
//        saldo = (camposDaLinhaApontada.at(3)).toInt();

//        //alterando o saldo do cliente Origem
//        saldo += valor;

//        linha = camposDaLinhaApontada.at(0) + ":" + camposDaLinhaApontada.at(1) + ":" + camposDaLinhaApontada.at(2) + ":" + QString::number(saldo);

//        linhasDoArquivo.replace(posicaoClienteOrigem, linha);




//        //fecha o arquivo para leitura

//        controladorDeRecursos->vetorFileClientes[agenciaOrigem]->close();


//        if (operacaoValida && clienteOrigemEncontrado){

//            controladorDeRecursos->vetorMutexClientes[agenciaOrigem].lock();
//            controladorDeRecursos->vetorFileClientes[agenciaOrigem]->open(QIODevice::WriteOnly);



//            for (int k = 0; k < linhasDoArquivo.size(); k++){
//                //qDebug() << "uma das linhas escrotas: " << linhasDoArquivo.at(k) <<endl;
//                *controladorDeRecursos->streamClientes[agenciaOrigem] << linhasDoArquivo.at(k) << endl;
//            }


//            controladorDeRecursos-> vetorFileClientes[agenciaOrigem]->close();

//            controladorDeRecursos-> vetorMutexClientes[agenciaOrigem].unlock();


//        }
//        else{
//            qDebug() << "Problemas com a transferencia em uma mesma agencia";

//        }



//    }else if (tipoDeTransacao == 1){//saque

//        //tranferencia entre agencias iguais


//        controladorDeRecursos->vetorFileClientes[agenciaOrigem]->open(QIODevice::ReadOnly);

//        //testar se as contas sao diferentes


//        linhasDoArquivo.clear();
//        camposDaLinhaApontada.clear();

//        do{ //buscar cliente origem


//            linhasDoArquivo.append(controladorDeRecursos->streamClientes[agenciaOrigem]->readLine());

//            camposDaLinhaApontada = linhasDoArquivo.last().split(":");

//            conta = (camposDaLinhaApontada.at(0)).toInt();
//            agencia = (camposDaLinhaApontada.at(1)).toInt();
//            nome = camposDaLinhaApontada.at(2);
//            saldo = (camposDaLinhaApontada.at(3)).toInt();


//        }while ((conta != contaOrigem) && !(controladorDeRecursos->streamClientes[agenciaOrigem]->atEnd()));



//        if (conta == contaOrigem){//achei o cliente

//            clienteOrigemEncontrado = true;
//            posicaoClienteOrigem = linhasDoArquivo.size() - 1;
//            //testar se o cliente origem tem saldo
//            if (saldo < valor) operacaoValida = false;

//        }else {//nao achei o cliente origem
//            clienteOrigemEncontrado = false;

//        }
//        //até aqui agente achou o primeiro e viu que ele tem saldo e agente tem o lock da agencia
//        // as linhas do arquivo contem todas as linhas até o usuario origem

//        while (!controladorDeRecursos->streamClientes[agenciaOrigem]->atEnd()){
//            linhasDoArquivo.append(controladorDeRecursos->streamClientes[agenciaOrigem]->readLine());
//        }


//        linha = linhasDoArquivo.at(posicaoClienteOrigem);
//        camposDaLinhaApontada = linha.split(":");

//        conta = (camposDaLinhaApontada.at(0)).toInt();

//        agencia = (camposDaLinhaApontada.at(1)).toInt();
//        nome = camposDaLinhaApontada.at(2);
//        saldo = (camposDaLinhaApontada.at(3)).toInt();

//        //alterando o saldo do cliente Origem
//        saldo -= valor;

//        linha = camposDaLinhaApontada.at(0) + ":" + camposDaLinhaApontada.at(1) + ":" + camposDaLinhaApontada.at(2) + ":" + QString::number(saldo);

//        linhasDoArquivo.replace(posicaoClienteOrigem, linha);




//        //fecha o arquivo para leitura

//        controladorDeRecursos->vetorFileClientes[agenciaOrigem]->close();


//        if (operacaoValida && clienteOrigemEncontrado){

//            controladorDeRecursos->vetorMutexClientes[agenciaOrigem].lock();
//            controladorDeRecursos->vetorFileClientes[agenciaOrigem]->open(QIODevice::WriteOnly);



//            for (int k = 0; k < linhasDoArquivo.size(); k++){
//                //qDebug() << "uma das linhas escrotas: " << linhasDoArquivo.at(k) <<endl;
//                *controladorDeRecursos->streamClientes[agenciaOrigem] << linhasDoArquivo.at(k) << endl;
//            }


//            controladorDeRecursos-> vetorFileClientes[agenciaOrigem]->close();

//            controladorDeRecursos-> vetorMutexClientes[agenciaOrigem].unlock();


//        }
//        else{
//            qDebug() << "Problemas com a transferencia em uma mesma agencia";

//        }

//    }else if (tipoDeTransacao == 2){//transferencia

//        if(agenciaOrigem!=agenciaDestino){//tranferencia entre agencias diferentes

//            controladorDeRecursos-> vetorFileClientes[agenciaOrigem]->open(QIODevice::ReadOnly);
//            controladorDeRecursos->vetorFileClientes[agenciaDestino]->open(QIODevice::ReadOnly);

//            linhasDoArquivo.clear();
//            camposDaLinhaApontada.clear();

//            do{ //buscar cliente origem


//                linhasDoArquivo.append(controladorDeRecursos->streamClientes[agenciaOrigem]->readLine());

//                camposDaLinhaApontada = linhasDoArquivo.last().split(":");

//                conta = (camposDaLinhaApontada.at(0)).toInt();
//                agencia = (camposDaLinhaApontada.at(1)).toInt();
//                nome = camposDaLinhaApontada.at(2);
//                saldo = (camposDaLinhaApontada.at(3)).toInt();


//            }while ((conta != contaOrigem) && !(controladorDeRecursos->streamClientes[agenciaOrigem]->atEnd()));



//            if (conta == contaOrigem){//achei o cliente

//                clienteOrigemEncontrado = true;
//                //testar se o cliente origem tem saldo
//                if (saldo < valor) operacaoValida = false;

//            }else {//nao achei o cliente origem
//                clienteOrigemEncontrado = false;

//            }



//            linhasDoArquivo2.clear();
//            camposDaLinhaApontada2.clear();

//            do{ //buscar cliente destino


//                linhasDoArquivo2.append(controladorDeRecursos->streamClientes[agenciaDestino]->readLine());

//                camposDaLinhaApontada2 = linhasDoArquivo2.last().split(":");

//                conta2 = (camposDaLinhaApontada2.at(0)).toInt();
//                agencia2 = (camposDaLinhaApontada2.at(1)).toInt();
//                nome2 = camposDaLinhaApontada2.at(2);
//                saldo2 = (camposDaLinhaApontada2.at(3)).toInt();


//            }while ((conta2 != contaDestino) && !(controladorDeRecursos->streamClientes[agenciaDestino]->atEnd()));

//            if (conta2 == contaDestino){//achei o cliente destino
//                clienteDestinoEncontrado = true;
//            }  else {//nao achei o cliente destino
//                clienteDestinoEncontrado = false;
//            }


//            if (operacaoValida && clienteOrigemEncontrado && clienteDestinoEncontrado){
//                //executar a operacao


//                QString linhaAtualizada = camposDaLinhaApontada.at(0) + ":" + camposDaLinhaApontada.at(1) + ":" + camposDaLinhaApontada.at(2) + ":" + QString::number(saldo - valor) ;
//                linhasDoArquivo.last() = linhaAtualizada;
//                while (!controladorDeRecursos->streamClientes[agenciaOrigem]->atEnd()){
//                    linhasDoArquivo.append(controladorDeRecursos->streamClientes[agenciaOrigem]->readLine());
//                }


//                QString linhaAtualizada2 = camposDaLinhaApontada2.at(0) + ":" + camposDaLinhaApontada2.at(1) + ":" + camposDaLinhaApontada2.at(2) + ":" + QString::number(saldo2 + valor) ;
//                linhasDoArquivo2.last() = linhaAtualizada2;
//                while (!controladorDeRecursos->streamClientes[agenciaDestino]->atEnd()){
//                    linhasDoArquivo2.append(controladorDeRecursos->streamClientes[agenciaDestino]->readLine());
//                }


//            }else {
//                qDebug() << "Problemas com a transferencia";

//                while (!controladorDeRecursos->streamClientes[agenciaOrigem]->atEnd()){
//                    linhasDoArquivo.append(controladorDeRecursos->streamClientes[agenciaOrigem]->readLine());
//                }


//                while (!controladorDeRecursos->streamClientes[agenciaDestino]->atEnd()){
//                    linhasDoArquivo2.append(controladorDeRecursos->streamClientes[agenciaDestino]->readLine());
//                }


//            }




//            controladorDeRecursos->vetorFileClientes[agenciaOrigem]->close();
//            controladorDeRecursos->vetorFileClientes[agenciaDestino]->close();


//            if (operacaoValida && clienteOrigemEncontrado && clienteDestinoEncontrado){

//                controladorDeRecursos->vetorMutexClientes[agenciaOrigem].lock();
//                controladorDeRecursos->vetorFileClientes[agenciaOrigem]->open(QIODevice::WriteOnly);
//                controladorDeRecursos->vetorMutexClientes[agenciaDestino].lock();
//                controladorDeRecursos->vetorFileClientes[agenciaDestino]->open(QIODevice::WriteOnly);




//                for (int k = 0; k < linhasDoArquivo.size(); k++){
//                    //qDebug() << "uma das linhas escrotas: " << linhasDoArquivo.at(k) <<endl;
//                    *controladorDeRecursos->streamClientes[agenciaOrigem] << linhasDoArquivo.at(k) << endl;
//                }


//                for (int m = 0; m < linhasDoArquivo2.size(); m++){
//                    //qDebug() << "uma das linhas escrotas: " << linhasDoArquivo.at(k) <<endl;
//                    *controladorDeRecursos->streamClientes[agenciaDestino] << linhasDoArquivo2.at(m) << endl;
//                }


//                controladorDeRecursos->vetorFileClientes[agenciaOrigem]->close();
//                controladorDeRecursos->vetorFileClientes[agenciaDestino]->close();


//                controladorDeRecursos->vetorMutexClientes[agenciaOrigem].unlock();
//                controladorDeRecursos->vetorMutexClientes[agenciaDestino].unlock();


//            }



//        }
//        else{//tranferencia entre agencias iguais


//            controladorDeRecursos->vetorFileClientes[agenciaOrigem]->open(QIODevice::ReadOnly);

//            //testar se as contas sao diferentes
//            if (contaOrigem == contaDestino) operacaoValida = false;

//            linhasDoArquivo.clear();
//            camposDaLinhaApontada.clear();

//            do{ //buscar cliente origem


//                linhasDoArquivo.append(controladorDeRecursos->streamClientes[agenciaOrigem]->readLine());

//                camposDaLinhaApontada = linhasDoArquivo.last().split(":");

//                conta = (camposDaLinhaApontada.at(0)).toInt();
//                agencia = (camposDaLinhaApontada.at(1)).toInt();
//                nome = camposDaLinhaApontada.at(2);
//                saldo = (camposDaLinhaApontada.at(3)).toInt();


//            }while ((conta != contaOrigem) && !(controladorDeRecursos->streamClientes[agenciaOrigem]->atEnd()));



//            if (conta == contaOrigem){//achei o cliente

//                clienteOrigemEncontrado = true;
//                posicaoClienteOrigem = linhasDoArquivo.size() - 1;
//                //testar se o cliente origem tem saldo
//                if (saldo < valor) operacaoValida = false;

//            }else {//nao achei o cliente origem
//                clienteOrigemEncontrado = false;

//            }
//            //até aqui agente achou o primeiro e viu que ele tem saldo e agente tem o lock da agencia
//            // as linhas do arquivo contem todas as linhas até o usuario origem

//            while (!controladorDeRecursos->streamClientes[agenciaOrigem]->atEnd()){
//                linhasDoArquivo.append(controladorDeRecursos->streamClientes[agenciaOrigem]->readLine());
//            }



//            if (clienteOrigemEncontrado == true){

//                for(int ro=0;ro<linhasDoArquivo.size();ro++){ //procurando o cliente destino

//                    linha = linhasDoArquivo.at(ro);
//                    camposDaLinhaApontada2 = linha.split(":");

//                    conta2 = (camposDaLinhaApontada2.at(0)).toInt();

//                    clienteDestinoEncontrado = false;

//                    if (conta2 == contaDestino){

//                        agencia2 = (camposDaLinhaApontada2.at(1)).toInt();
//                        nome2 = camposDaLinhaApontada2.at(2);
//                        saldo2 = (camposDaLinhaApontada2.at(3)).toInt();

//                        //alterando o saldo do cliente Destino
//                        saldo2 += valor;

//                        linha = camposDaLinhaApontada2.at(0) + ":" + camposDaLinhaApontada2.at(1) + ":" + camposDaLinhaApontada2.at(2) + ":" + QString::number(saldo2);

//                        linhasDoArquivo.replace(ro, linha);

//                        clienteDestinoEncontrado = true;

//                        break;

//                    }

//                }
//            }



//            if (clienteDestinoEncontrado == true){


//                linha = linhasDoArquivo.at(posicaoClienteOrigem);
//                camposDaLinhaApontada = linha.split(":");

//                conta = (camposDaLinhaApontada.at(0)).toInt();

//                agencia = (camposDaLinhaApontada.at(1)).toInt();
//                nome = camposDaLinhaApontada.at(2);
//                saldo = (camposDaLinhaApontada.at(3)).toInt();

//                //alterando o saldo do cliente Origem
//                saldo -= valor;

//                linha = camposDaLinhaApontada.at(0) + ":" + camposDaLinhaApontada.at(1) + ":" + camposDaLinhaApontada.at(2) + ":" + QString::number(saldo);

//                linhasDoArquivo.replace(posicaoClienteOrigem, linha);


//            }

//            //fecha o arquivo para leitura

//            controladorDeRecursos->vetorFileClientes[agenciaOrigem]->close();


//            if (operacaoValida && clienteOrigemEncontrado && clienteDestinoEncontrado){

//                controladorDeRecursos->vetorMutexClientes[agenciaOrigem].lock();
//                controladorDeRecursos->vetorFileClientes[agenciaOrigem]->open(QIODevice::WriteOnly);



//                for (int k = 0; k < linhasDoArquivo.size(); k++){
//                    //qDebug() << "uma das linhas escrotas: " << linhasDoArquivo.at(k) <<endl;
//                    *controladorDeRecursos->streamClientes[agenciaOrigem] << linhasDoArquivo.at(k) << endl;
//                }


//                controladorDeRecursos-> vetorFileClientes[agenciaOrigem]->close();

//                controladorDeRecursos-> vetorMutexClientes[agenciaOrigem].unlock();


//            }
//            else{
//                qDebug() << "Problemas com a transferencia em uma mesma agencia";

//                //                while (!controladorDeRecursos->streamClientes[agenciaOrigem]->atEnd()){
//                //                    linhasDoArquivo.append(controladorDeRecursos->streamClientes[agenciaOrigem]->readLine());
//                //                }


//            }


//        }



//    }

//}

